package Motor;


import java.util.Random;

import javax.microedition.lcdui.Image;
import javax.microedition.rms.RecordStore;


public class Juego { 
	
	private Player jugador[];
	private Luchador luchador[];
	RecordStore rs;
	
	public Juego(){
		ListaCartas b0,h0,b1,h1;
		b0=barajaPrueba();
		h0=heroesPrueba();
		b0.barajear();
		h0.barajear();
		setJugador(new Player[2]);
		getJugador()[0]=new Player(b0,h0);
		System.out.println("Creo Jugador0");
		b1=barajaPrueba();
		h1=heroesPrueba();
		b1.barajear();
		h1.barajear();
		getJugador()[1]=new Player(b1,h1);
		System.out.println("Creo Jugador1");
		setLuchador(new Luchador[2]);
		getLuchador()[0]= new Luchador();
		getLuchador()[1]= new Luchador();
	}
	
	public Juego(Player[] p, Luchador[] l){
		jugador=p;
		luchador=l;
	}
	
	Juego(ListaCartas b0,ListaCartas h0,ListaCartas b1,ListaCartas h1){
		b0.barajear();
		h0.barajear();
		setJugador(new Player[2]);
		getJugador()[0]=new Player(b0,h0);
		System.out.println("Creo Jugador0");
		b1.barajear();
		h1.barajear();
		getJugador()[1]=new Player(b1,h1);
		System.out.println("Creo Jugador1");
		setLuchador(new Luchador[2]);
		getLuchador()[0]= new Luchador();
		getLuchador()[1]= new Luchador();
	}

	static ListaCartas barajaPrueba() {
		// TODO Auto-generated method stub
		ListaCartas b=new ListaCartas();
		Image i,i2;
		Random r=new Random();
		for (int a=0;a<12;a++){
			int rnd = r.nextInt(24)+8;
			switch(rnd){
			case 8:
				try {
					i = Image.createImage("/Imagenes/empujeAstral.png");
					i2=Image.createImage("/Imagenes/iempujeAstral.png");
					System.out.println("Creo Carta EmpujeAstral");
					Carta c=new Habilidad(rnd,1,i,i2,true);
					b.insertar(c);
				} catch (Exception e) {
					System.out.println("Fallo!! Carta: "+rnd);
				}
				break;
			case 9:
				try {
					i = Image.createImage("/Imagenes/proyectilMagico.png");
					i2=Image.createImage("/Imagenes/iproyectilMagico.png");
					System.out.println("Creo Carta ProyectilMagico");
					Carta c=new Habilidad(rnd,1,i,i2,true);
					b.insertar(c);
				} catch (Exception e) {System.out.println("Fallo!! Carta: "+rnd);}
				break;
			case 10:
				try {
					i = Image.createImage("/Imagenes/congelar.png");
					i2=Image.createImage("/Imagenes/icongelar.png");
					System.out.println("Creo Carta congelar");
					Carta c=new Habilidad(rnd,1,i,i2,true);
					b.insertar(c);
				} catch (Exception e) {System.out.println("Fallo!! Carta: "+rnd);}
				break;
			case 11:
				try {
					i = Image.createImage("/Imagenes/escudoMana.png");
					i2=Image.createImage("/Imagenes/iescudoMana.png");
					System.out.println("Creo Carta escudoMAna");
					Carta c=new Habilidad(rnd,1,i,i2,true);
					b.insertar(c);
				} catch (Exception e) {System.out.println("Fallo!! Carta: "+rnd);}
				break;
			case 12:
				try {
					i = Image.createImage("/Imagenes/absorverVida.png");
					i2=Image.createImage("/Imagenes/iabsorverVida.png");
					System.out.println("Creo Carta AbsorverVida");
					Carta c=new Habilidad(rnd,1,i,i2,true);
					b.insertar(c);
				} catch (Exception e) {System.out.println("Fallo!! Carta: "+rnd);}
				break;
			case 13:
				try {
					i = Image.createImage("/Imagenes/auraVeloz.png");
					i2=Image.createImage("/Imagenes/iauraVeloz.png");
					System.out.println("Creo Carta AuraVeloz");
					Carta c=new Habilidad(rnd,1,i,i2,false);
					b.insertar(c);
				} catch (Exception e) {System.out.println("Fallo!! Carta: "+rnd);}
				break;
			case 14:
				try {
					i = Image.createImage("/Imagenes/auraPoderosa.png");
					i2=Image.createImage("/Imagenes/iauraPoderosa.png");
					System.out.println("Creo Carta AuraPoderosa");
					Carta c=new Habilidad(rnd,1,i,i2,false);
					b.insertar(c);
				} catch (Exception e) {System.out.println("Fallo!! Carta: "+rnd);}
				break;
			case 15:
				try {
					i = Image.createImage("/Imagenes/sanar.png");
					i2=Image.createImage("/Imagenes/isanar.png");
					System.out.println("Creo Carta Sanar");
					Carta c=new Habilidad(rnd,1,i,i2,false);
					b.insertar(c);
				} catch (Exception e) {System.out.println("Fallo!! Carta: "+rnd);}
				break;
			case 16:
				try {
					i = Image.createImage("/Imagenes/maldicion.png");
					i2=Image.createImage("/Imagenes/imaldicion.png");
					System.out.println("Creo Carta Maldcion");
					Carta c=new Habilidad(rnd,1,i,i2,true);
					b.insertar(c);
				} catch (Exception e) {System.out.println("Fallo!! Carta: "+rnd);}
				break;
			case 17:
				try {
					i = Image.createImage("/Imagenes/furiaBersek.png");
					i2=Image.createImage("/Imagenes/ifuriaBersek.png");
					System.out.println("Creo Carta Furia Bersek");
					Carta c=new Habilidad(rnd,2,i,i2,true);
					b.insertar(c);
				} catch (Exception e) {System.out.println("Fallo!! Carta: "+rnd);}
				break;
			case 18:
				try {
					i = Image.createImage("/Imagenes/colera.png");
					i2=Image.createImage("/Imagenes/icolera.png");
					System.out.println("Creo Carta colera");
					Carta c=new Habilidad(rnd,2,i,i2,true);
					b.insertar(c);
				} catch (Exception e) {System.out.println("Fallo!! Carta: "+rnd);}
				break;
			case 19:
				try {
					i = Image.createImage("/Imagenes/espadaBisonte.png");
					i2=Image.createImage("/Imagenes/iespadaBisonte.png");
					System.out.println("Creo Carta Espada Bisonte");
					Carta c=new Habilidad(rnd,2,i,i2,false);
					b.insertar(c);
				} catch (Exception e) {System.out.println("Fallo!! Carta: "+rnd);}
				break;
			case 20:
				try {
					i = Image.createImage("/Imagenes/cascoConcentracion.png");
					i2=Image.createImage("/Imagenes/icascoConcentracion.png");
					System.out.println("Creo Carta CascoConcentracion");
					Carta c=new Habilidad(rnd,2,i,i2,false);
					b.insertar(c);
				} catch (Exception e) {System.out.println("Fallo!! Carta: "+rnd);}
				break;
			case 21:
				try {
					i = Image.createImage("/Imagenes/gritoGuerra.png");
					i2=Image.createImage("/Imagenes/igritoGuerra.png");
					System.out.println("Creo Carta Grito Guerra");
					Carta c=new Habilidad(rnd,2,i,i2,true);
					b.insertar(c);
				} catch (Exception e) {System.out.println("Fallo!! Carta: "+rnd);}
				break;
			case 22:
				try {
					i = Image.createImage("/Imagenes/escudoHoraldrico.png");
					i2=Image.createImage("/Imagenes/iescudoHoraldrico.png");
					System.out.println("Creo Carta Escudo Horaldrico");
					Carta c=new Habilidad(rnd,2,i,i2,false);
					b.insertar(c);
				} catch (Exception e) {System.out.println("Fallo!! Carta: "+rnd);}
				break;
			case 23:
				try {
					i = Image.createImage("/Imagenes/armaduraDemoniaca.png");
					i2=Image.createImage("/Imagenes/iarmaduraDemoniaca.png");
					System.out.println("Creo Carta Armadura demoniaca");
					Carta c=new Habilidad(rnd,2,i,i2,false);
					b.insertar(c);
				} catch (Exception e) {System.out.println("Fallo!! Carta: "+rnd);}
				break;
			case 24:
				try {
					i = Image.createImage("/Imagenes/fuerzaGuerrero.png");
					i2=Image.createImage("/Imagenes/ifuerzaGuerrero.png");
					System.out.println("Creo Carta Fuerza Guerrero");
					Carta c=new Habilidad(rnd,2,i,i2,true);
					b.insertar(c);
				} catch (Exception e) {System.out.println("Fallo!! Carta: "+rnd);}
				break;
			case 25:
				try {
					i = Image.createImage("/Imagenes/asaltoNocturno.png");
					i2=Image.createImage("/Imagenes/iasaltoNocturno.png");
					System.out.println("Creo Carta Asalto Nocturno");
					Carta c=new Habilidad(rnd,2,i,i2,false);
					b.insertar(c);
				} catch (Exception e) {System.out.println("Fallo!! Carta: "+rnd);}
				break;
			case 26:
				try {
					i = Image.createImage("/Imagenes/arcoArce.png");
					i2=Image.createImage("/Imagenes/iarcoArce.png");
					System.out.println("Creo Carta ArcoArce");
					Carta c=new Habilidad(rnd,0,i,i2,false);
					b.insertar(c);
				} catch (Exception e) {System.out.println("Fallo!! Carta: "+rnd);}
				break;
			case 27:
				try {
					i = Image.createImage("/Imagenes/flechaIncend.png");
					i2=Image.createImage("/Imagenes/iflechaIncend.png");
					System.out.println("Creo Carta flechaIncendiaria");
					Carta c=new Habilidad(rnd,0,i,i2,true);
					b.insertar(c);
				} catch (Exception e) {System.out.println("Fallo!! Carta: "+rnd);}
				break;
			case 28:
				try {
					i = Image.createImage("/Imagenes/camuflage.png");
					i2=Image.createImage("/Imagenes/icamuflage.png");
					System.out.println("Creo Carta camuflage");
					Carta c=new Habilidad(rnd,0,i,i2,true);
					b.insertar(c);
				} catch (Exception e) {System.out.println("Fallo!! Carta: "+rnd);}
				break;
			case 29:
				try {
					i = Image.createImage("/Imagenes/corazaCuero.png");
					i2=Image.createImage("/Imagenes/icorazaCuero.png");
					System.out.println("Creo Carta coraxa de cuero");
					Carta c=new Habilidad(rnd,0,i,i2,false);
					b.insertar(c);
				} catch (Exception e) {System.out.println("Fallo!! Carta: "+rnd);}
				break;
			case 30:
				try {
					i = Image.createImage("/Imagenes/punteriaExperta.png");
					i2=Image.createImage("/Imagenes/ipunteriaExperta.png");
					System.out.println("Creo Carta PunteriaExperta");
					Carta c=new Habilidad(rnd,0,i,i2,true);
					b.insertar(c);
				} catch (Exception e) {System.out.println("Fallo!! Carta: "+rnd);}
				break;
			case 31:
				try {
					i = Image.createImage("/Imagenes/rifle.png");
					i2=Image.createImage("/Imagenes/irifle.png");
					System.out.println("Creo Carta Rifle");
					Carta c=new Habilidad(rnd,0,i,i2,true);
					b.insertar(c);
				} catch (Exception e) {System.out.println("Fallo!! Carta: "+rnd);}
				break;	
			default:
				System.out.println("Fallo!! Carta: "+rnd);
			}				
		}
		return b;
	}
	
	static ListaCartas heroesPrueba() {
		// TODO Auto-generated method stub
		ListaCartas b=new ListaCartas();
		Image i,i2;
		
		//CREO 4 CARTAS DE HERO PARA LA BARAJA DE PRUEBA
		try {
			i = Image.createImage("/Imagenes/Osgiliath.png");
			i2 = Image.createImage("/Imagenes/iOsgiliath.png");
			System.out.println("Creo Carta Hero O");
			Carta c=new Hero(3,2,i,i2,4,4,7);
			b.insertar(c);
		} catch (Exception e) {}
		try {
			i = Image.createImage("/Imagenes/Deivian.png");
			i2 = Image.createImage("/Imagenes/iDeivian.png");
			System.out.println("Creo Carta Hero D");
			Carta c=new Hero(4,2,i,i2,3,3,9);
			b.insertar(c);
		} catch (Exception e) {}
		try {
			i = Image.createImage("/Imagenes/Venelon.png");
			i2 = Image.createImage("/Imagenes/iVenelon.png");
			System.out.println("Creo Carta Hero V");
			Carta c=new Hero(7,0,i,i2,1,7,7);
			b.insertar(c);
			} catch (Exception e) {}
		try {
			i = Image.createImage("/Imagenes/Slyver.png");
			i2 = Image.createImage("/Imagenes/iSlyver.png");
			System.out.println("Creo Carta Hero S");
			Carta c=new Hero(1,1,i,i2,3,7,5);
			b.insertar(c);
		} catch (Exception e) {}
		
		return b;
	}
	public int resolverCombate(){
		
		Hero hero0,heroC0,hero1,heroC1;
		Habilidad h00,h01,h10,h11;		
		heroC0=(Hero)getLuchador()[0].getList().verCarta(0);
		heroC1=(Hero)getLuchador()[1].getList().verCarta(0);
		
		//System.out.println(mostrar());
		
		int id0=heroC0.getId();
		
		int id1=heroC1.getId();
		
		hero0=(Hero)getJugador()[0].getHeros().buscarCarta(id0);
		
		hero1=(Hero)getJugador()[1].getHeros().buscarCarta(id1);
		
		//Cogemos habilidad0 de jugador0 si existe y la usamos
		
		try{
			h00=hero0.getEquipo();
			//los cambios asi solo se hacen efectivos en el heroe y no en el luchador
			h00.usar(hero0, hero1, heroC0, heroC1);
			//aki acemos los cabios en el luchador
			getLuchador()[0].setHero(hero0);
		}catch(Exception e){}
		//Cogemos habilidad0 de jugador1 si existe y la usamos
		try{
			h10=hero1.getEquipo();
			h10.usar(hero1, hero0, heroC1, heroC0);
			getLuchador()[1].setHero(hero1);
		}catch(Exception e){}		
		//los volvemos a cojer actualizados
		heroC0=(Hero)getLuchador()[0].getList().verCarta(0);
		heroC1=(Hero)getLuchador()[1].getList().verCarta(0);
		//Calculamos el atkT de Hero0
		heroC0.calcularAtkt(getLuchador()[0].getPillz());
		//Calculamos el atkT de Hero0
		heroC1.calcularAtkt(getLuchador()[1].getPillz());
		
		
		//Cogemos habilidad1 de jugador0 si existe y la usamos
		try{
			h01=(Habilidad)getLuchador()[0].getList().verCarta(1);			
			if(h01.getId()!=12 && h01.getId()!=17){
				h01.usar(hero0, hero1, heroC0, heroC1);
			}
		}catch(Exception e){}
		//Cogemos habilidad1 de jugador1 si existe y la usamos
		try{
			h11=(Habilidad)getLuchador()[1].getList().verCarta(1);
			if(h11.getId()!=12 && h11.getId()!=17){
				h11.usar(hero1, hero0, heroC1, heroC0);
			}
		}catch(Exception e){}
		
		int res=Hero.resolverGanador(heroC0,heroC1);
		
		//resuelvo habilidades de bonificacion segun el resultado del combate
		if (res==0){
			heroC0.pegar(hero1);
			try{
				h01=(Habilidad)getLuchador()[0].getList().verCarta(1);
				if(h01.getId()==12){
					h01.usar(hero0, hero1, heroC0, heroC1);
				}
			}catch(Exception e){}
			try{
				h11=(Habilidad)getLuchador()[1].getList().verCarta(1);
				if(h11.getId()==17){
					h11.usar(hero1, hero0, heroC1, heroC0);
				}
			}catch(Exception e){}
		}else{
			heroC1.pegar(hero0);
			try{
				h11=(Habilidad)getLuchador()[1].getList().verCarta(1);
				if(h11.getId()==12){
					h11.usar(hero1, hero0, heroC1, heroC0);
				}
			}catch(Exception e){}
			try{
				h01=(Habilidad)getLuchador()[0].getList().verCarta(1);
				if(h01.getId()==17){
					h01.usar(hero0, hero1, heroC0, heroC1);
				}
			}catch(Exception e){}
		}
		return res;
	}

	public Player[] getJugador() {
		return jugador;
	}

	public void setJugador(Player jugador[]) {
		this.jugador = jugador;
	}

	public Luchador[] getLuchador() {
		return luchador;
	}

	public void setLuchador(Luchador luchador[]) {
		this.luchador = luchador;
	}

	public String mostrar() {
		// TODO Auto-generated method stub
		String s="Jugadores: [";
		for(int i=0;i<jugador.length;i++){
			s=s+jugador[i].mostrar()+", ";
		}
		s=s+"]\nLuchadores: [";
		for(int i=0;i<jugador.length;i++){
			s=s+luchador[i].mostrar()+", ";
		}
		return s;
	}

	public void setJugador(Player p, int i) {
		// TODO Auto-generated method stub
		jugador[i]=p;
	}

	public void setLuchador(Luchador l, int i) {
		// TODO Auto-generated method stub
		luchador[i]=l;
	}
	
	public Juego copiar(){
		Player[] auxP= new Player[getJugador().length];
		for(int i=0;i<getJugador().length;i++){
			auxP[i]=getJugador()[i].copiar();
		}
		Luchador[] auxL= new Luchador[getJugador().length];
		for(int i=0;i<getLuchador().length;i++){
			auxL[i]=getLuchador()[i].copiar();
		}
		return new Juego(auxP,auxL);
	}
	
}
